package by.bsu.touragency.tag;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.log4j.Logger;

import by.bsu.touragency.command.guest.ConfigurationManager;
import by.bsu.touragency.db.beans.Person;
import by.bsu.touragency.db.beans.Tour;
import by.bsu.touragency.db.dao.BookedTourDAO;
import by.bsu.touragency.db.dao.PersonDAO;
import by.bsu.touragency.db.dao.TourDAO;

public class ToursClientTag extends BodyTagSupport{
	

		private static final long serialVersionUID = 1L;
		private static Logger logger=Logger.getLogger("log");
		
		private TourDAO t = new TourDAO();
		private int num;
		private ArrayList<Tour> tourId;
		private Person client;
		private String login;
	
		public void setUser(String user) {
			this.login = new String(user);
		}
		public int getTourPrice() {
			return t.readById(tourId.get(num).getId()).getPrice();
		}
		
		public String getTourPlace() {
			String str;
			str = t.readById(tourId.get(num).getId()).getHotel().getName()+", ";
			str += t.readById(tourId.get(num).getId()).getHotel().getCity().getCityName()+", ";
			str += t.readById(tourId.get(num).getId()).getHotel().getCity().getCountry().getCountryName();
			return str;
		}
		public String getTourPeople() {
			String str;
			str = t.readById(tourId.get(num).getId()).getHotel().getPeople().getChildren()+ " children & ";
			str += t.readById(tourId.get(num).getId()).getHotel().getPeople().getAdults()+" adults";
			return str;
		}
		public String getTourEat() {
			String str;
			str = t.readById(tourId.get(num).getId()).getHotel().getEat().getType()+ ": ";
			str += t.readById(tourId.get(num).getId()).getHotel().getEat().getAbout()+" ";
			return str;
		}
		public String getTourHotel() {
			String str;
			str = t.readById(tourId.get(num).getId()).getHotel().getName()+ " ";
			str += t.readById(tourId.get(num).getId()).getHotel().getStar().getName();
			if (t.readById(tourId.get(num).getId()).getHotel().getStar().getAbout()!=null&&t.readById(tourId.get(num).getId()).getHotel().getStar().getAbout()!=""){
			str +=" (";
			str += t.readById(tourId.get(num).getId()).getHotel().getStar().getAbout()+") .";
			}
			if (t.readById(tourId.get(num).getId()).getHotel().getAbout()!=null&&t.readById(tourId.get(num).getId()).getHotel().getAbout()!="")
			str += t.readById(tourId.get(num).getId()).getHotel().getAbout();
			return str;
		}
		public String getTourCountry() {
			String str;
			str = t.readById(tourId.get(num).getId()).getHotel().getCity().getCountry().getCountryName()+". ";
			str += t.readById(tourId.get(num).getId()).getHotel().getCity().getCountry().getAbout();
			return str;
		}
		public String getTourCity() {
			String str;
			str = t.readById(tourId.get(num).getId()).getHotel().getCity().getCityName()+". ";
			str += t.readById(tourId.get(num).getId()).getHotel().getCity().getAbout();
			return str;
		}
		public String getTourTransfer() {
			String str;
			str = t.readById(tourId.get(num).getId()).getTransfer().getDateFrom().getTime()+" ";
			str += t.readById(tourId.get(num).getId()).getTransfer().getDateTo().getTime()+".";
			return str;
		}
		public String getTourTransport() {
			String str;
			str = t.readById(tourId.get(num).getId()).getTransport().getView().getName()+"  ";
			str += t.readById(tourId.get(num).getId()).getTransport().getView().getNumber()+"."+"\n";
			str += t.readById(tourId.get(num).getId()).getTransport().getDateFrom().getTime()+" - ";
			str += t.readById(tourId.get(num).getId()).getTransport().getCityFrom().getCityName() +"\n";
			str += t.readById(tourId.get(num).getId()).getTransport().getDateTo().getTime()+" - ";
			str += t.readById(tourId.get(num).getId()).getTransport().getCityTo().getCityName() +". ";
			return str;
		}
		public String getTourDates() {
			String str;
			str = t.readById(tourId.get(num).getId()).getDateFrom().getTime()+" - ";
			str += t.readById(tourId.get(num).getId()).getDateTo().getTime()+".";
			return str;
		}
		public int doStartTag() throws JspTagException {
			logger.info("Tour Client tag do start");
			PersonDAO cd = new  PersonDAO();
			client = cd.readByLogin(login);
			
			BookedTourDAO bd = new BookedTourDAO();
			num = bd.readByClient(client).size();
		    tourId = bd.readByClient(client);
		    
			return EVAL_BODY_INCLUDE;
		}

		public int doAfterBody() throws JspTagException {
			logger.info("Tour Client tag After body");
			if (num-- > 0) {
				try {
					pageContext.getOut().write("<div class=");
					pageContext.getOut().write("\"post1\"");
					pageContext.getOut().write(">");
					pageContext.getOut().write("<div class=");
					pageContext.getOut().write("\"post\"");
					pageContext.getOut().write(">");
					pageContext.getOut().write("<h1 class=");
					pageContext.getOut().write("\"title\"");
					pageContext.getOut().write(">");
					
					pageContext.getOut().write(getTourPlace());
					pageContext.getOut().write("</h1>");
					pageContext.getOut().write("<div class=");
					pageContext.getOut().write("\"entry\"");
					pageContext.getOut().write(">");
					pageContext.getOut().write("<p><img src=\"");
					pageContext.getOut().write(pageContext.getServletContext().getContextPath()+
							ConfigurationManager.getInstance().getProperty(
							ConfigurationManager.IMAGE_PAGE_PATH) + "\"");
					pageContext.getOut().write("alt=\"\" width=");
					pageContext.getOut().write("\"140\"");
					pageContext.getOut().write("height=");
					pageContext.getOut().write("\"125\"");
					pageContext.getOut().write("class=");
					pageContext.getOut().write("\"left\"");
					pageContext.getOut().write("/>");
					
					pageContext.getOut().write(getTourDates());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourCountry());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourCity());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourHotel());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourTransport());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourTransfer());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourPeople());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write(getTourEat());
					pageContext.getOut().write("<br/>");
					pageContext.getOut().write("Price: ");
					pageContext.getOut().write(getTourPrice()+" $");
					pageContext.getOut().write("</p>");
					
					pageContext.getOut().write("<p>&nbsp;</p>");
					pageContext.getOut().write("</div>");
			
					pageContext.getOut().write("<div class=");
					pageContext.getOut().write("\"meta \"");
					pageContext.getOut().write(">");
					pageContext.getOut().write("<p class=");
					pageContext.getOut().write("byline");
					pageContext.getOut().write(">Posted on July 21, 2007</p>");
					
					logger.debug("autorisation check");
					if (pageContext.getSession().getAttribute("user") != ""
							&& pageContext.getSession().getAttribute("user") != null) {

						Person p = new Person();
						PersonDAO pd = new PersonDAO();

						p = pd.readByLogin(pageContext.getSession().getAttribute(
								"user")
								+ "");

						logger.debug("is admin");
						if (!p.isAdmin()) {
							pageContext.getOut().write("<p class=");
							pageContext.getOut().write("\"links\"");
							pageContext.getOut().write("><a href=");
							
							pageContext.getOut().write(
									"\"canceltour.jsp?idTour=" + (tourId.get(num).getId()) + "\"");
							pageContext.getOut().write("class=");
							pageContext.getOut().write("\"link\"");
							pageContext.getOut().write(">Cancel</a></p>");
						}
					}
					
					pageContext.getOut().write("</div>");
					pageContext.getOut().write("</div>");
					pageContext.getOut().write("</div>");
					
				} catch (IOException e) {
					logger.error("Error in client's tours tag");
				}
				return EVAL_BODY_AGAIN;
			} else {
				if(tourId.size() == 0)
					try {
						pageContext.getOut().write("No tours");
					} catch (IOException e) {
						logger.error("Erroe in Tours client tag");
					}
				return SKIP_BODY;
			}
		}

		public int doEndTag() throws JspTagException {
			return SKIP_BODY;
		}
	}


